import 'dart:isolate';

///isolate 通信 - 单向
///isolate - ReceivePort 里面包含了两组fd
void main() async{
  print("main begin");

  ReceivePort receivePort = ReceivePort();
  Isolate.spawn(newThread,["你好",receivePort.sendPort]);
  //方案1：通过listen进行监听
  receivePort.listen((message) {
    print("listen方式-主线程接收到消息：$message");
  });
  //方案2：通过 await关键字与async关键字建立阻塞通道
  // var msg = await receivePort.first;
  //上面这两种方案上只选选择一种处理
  //原因：这里dart对于数据的等待接收，我们可以看做为socket的BIO与NIO
  //listen方案实际上就是利用select，epoll这种方案在进行循环监听
  //await 就是read的阻塞式等待


  // print("await方式-主线程接收到消息：$msg");
  print("main end");
}


///参数的定义可以随意，参数中接收的SendPort是需要通信的发送端口
///@sendPort
void newThread(var message){
  String msg = message[0];
  SendPort sendPort = message[1];
  print("通过参数传递的数据1：$msg");

  //通过传递过来的sendPort给主线程回消息
  sendPort.send("这个是子线程给主线程回的消息！！！");
}